ã³ã³ãã³ããªãŒããŒã¬ã€ãéããŠããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããDocument Picture-in-Picture APIã®åãæ¢æ±ããŸãããããã®æ©èœãå®è£ ããã¹ããã©ã¯ãã£ã¹ã«ã€ããŠåŠã³ãŸãã
Document Picture-in-Picture: ã³ã³ãã³ããªãŒããŒã¬ã€ã®è©³çް
Document Picture-in-Picture APIã¯ãéçºè ãããŸããŸãªã¿ããã¢ããªã±ãŒã·ã§ã³éã§æ°žç¶çã«è¡šç€ºããããããŒãã£ã³ã°ãããªãŠã£ã³ããŠãäœæã§ãã匷åãªWeb APIã§ããåãªããããªåçãè¶ ããã«ã¹ã¿ã ã³ã³ãã³ããã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ããããªã®äžã«éããŠè¡šç€ºã§ããŸããããã«ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããé åçãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å¹ åºãå¯èœæ§ãéãããŸãã
Document Picture-in-Pictureãšã¯ïŒ
åŸæ¥ãPicture-in-PictureïŒPiPïŒã¯äž»ã«ãããªåçã«äœ¿çšãããŠããŸãããDocument Picture-in-Picture APIã¯ãã¡ã€ã³ããã¥ã¡ã³ããšã¯å¥ã®å®å šã«æ°ãããŠã£ã³ããŠãäœæããããã§ä»»æã®HTMLã³ã³ãã³ããã¬ã³ããªã³ã°ã§ããããã«ããããšã§ããã®æ©èœãæ¡åŒµããŸãããã®ã³ã³ãã³ãã«ã¯ããããªãç»åãããã¹ããã€ã³ã¿ã©ã¯ãã£ãã³ã³ãããŒã«ãããã«ã¯Webã¢ããªã±ãŒã·ã§ã³å šäœãå«ããããšãã§ããŸãã
ä»ã®ã¢ããªã±ãŒã·ã§ã³ã®äžã«æµ®ãã¶ãããã©ãŠã¶ãŠã£ã³ããŠãšèããŠãã ãããããã¯ãæ°žç¶çã§ã¢ã¯ã»ã¹å¯èœãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸããããã¯ããŠãŒã¶ãŒãä»ã®ã¿ã¹ã¯ãå®è¡ããªãããæ å ±ãåžžã«ç£èŠããããç¹å®ã®ã³ã³ãããŒã«ã»ãããæäœãããããå¿ èŠãããã·ããªãªã«ç¹ã«åœ¹ç«ã¡ãŸãã
äž»ãªæ©èœãšå©ç¹
- ã«ã¹ã¿ã ã³ã³ãã³ãïŒãããªã ãã§ãªããPiPãŠã£ã³ããŠå ã§ä»»æã®HTMLã³ã³ãã³ããã¬ã³ããªã³ã°ããŸãã
- ã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ïŒãã¿ã³ããã©ãŒã ããã®ä»ã®ã€ã³ã¿ã©ã¯ãã£ãã³ã³ãããŒã«ãå«ããŠããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãå¯èœã«ããŸãã
- æ°žç¶çãªãŠã£ã³ããŠïŒPiPãŠã£ã³ããŠã¯ãã¡ã€ã³ããã¥ã¡ã³ããéããããããç§»åãããããŠã衚瀺ããããŸãŸã§ãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒãŠãŒã¶ãŒãéèŠãªæ å ±ãã³ã³ãããŒã«ã«ã¢ã¯ã»ã¹ããããã®ã·ãŒã ã¬ã¹ã§äŸ¿å©ãªæ¹æ³ãæäŸããŸãã
- ãã«ãã¿ã¹ã¯ã®åŒ·åïŒãŠãŒã¶ãŒãPiPãŠã£ã³ããŠãç£èŠãŸãã¯æäœããªãããä»ã®ã¿ã¹ã¯ãå®è¡ã§ããŸãã
䜿çšäŸ
1. ãããªäŒè°ãšã³ã©ãã¬ãŒã·ã§ã³
Document Picture-in-Pictureã䜿çšããŠãåå è ã®ãããªãã£ãŒãã®å°ããªãŠã£ã³ããŠã衚瀺ãããããªäŒè°ã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ãããããã«ããããŠãŒã¶ãŒã¯ä»ã®ããã¥ã¡ã³ããã¢ããªã±ãŒã·ã§ã³ãé²èЧããªãããã³ã©ãã¬ãŒã·ã§ã³ãç¶ããããšãã§ããŸããå¥ã®ãã¬ãŒã³ããŒã·ã§ã³ãããã¥ã¡ã³ãããŸãã¯ã¹ãã¬ããã·ãŒãã§äœæ¥ããªãããååã®å§¿ãèŠãŠã声ãèŽãããšãã§ããŸãã
äŸïŒæ¥æ¬ã®ãããžã§ã¯ããããŒãžã£ãŒã¯ããããžã§ã¯ãèšç»ãã¬ãã¥ãŒããªãããç±³åœã§éå¬ãããŠããäŒè°ãç£èŠããããã«ããã䜿çšã§ããŸãã
2. ã¡ãã£ã¢ã¢ãã¿ãªã³ã°ãšã¹ããªãŒãã³ã°
ãã¥ãŒã¹æ©é¢ãã¡ãã£ã¢çµç¹ã¯ãDocument Picture-in-PictureãæŽ»çšããŠããªã¢ã«ã¿ã€ã ã®ãã¥ãŒã¹ãã£ãŒããæ ªäŸ¡ãã£ãã«ãŒããŸãã¯ãœãŒã·ã£ã«ã¡ãã£ã¢ã®æŽæ°ã衚瀺ãããããŒãã£ã³ã°ãŠã£ã³ããŠããŠãŒã¶ãŒã«æäŸã§ããŸããããã«ããããŠãŒã¶ãŒã¯ãã¿ããã¢ããªã±ãŒã·ã§ã³ãé »ç¹ã«åãæ¿ããããšãªããæ å ±ãå ¥æã§ããŸãã
äŸïŒãã³ãã³ã®éèã¢ããªã¹ãã¯ãåžå Žã¬ããŒããå·çããªãããPiPãŠã£ã³ããŠã§æ ªäŸ¡ã远跡ã§ããŸãã
3. ã²ãŒã ãšã²ãŒã ã¹ããªãŒãã³ã°
ã²ãŒã éçºè ã¯ãDocument Picture-in-Pictureã䜿çšããŠãã²ãŒã ã®çµ±èšããã£ãããŠã£ã³ããŠããŸãã¯ã³ã³ãããŒã«ããã«ããããŒãã£ã³ã°ãŠã£ã³ããŠã«è¡šç€ºã§ããŸããããã«ãããã²ãŒããŒã¯ãã²ãŒã ãã¬ã€ãäžæããããšãªããéèŠãªæ å ±ãã³ã³ãããŒã«ã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããŸãã
äŸïŒéåœã®ããã²ãŒããŒã¯ãã²ãŒã ããã¬ã€ããªãããã¹ããªãŒãã³ã°ãªãŒããŒã¬ã€ãšãã£ãããŠã£ã³ããŠãPiPã«è¡šç€ºã§ããŸãã
4. çç£æ§ãšã¿ã¹ã¯ç®¡ç
ã¿ã¹ã¯ç®¡çã¢ããªã±ãŒã·ã§ã³ã¯ãDocument Picture-in-Pictureã䜿çšããŠãã¿ã¹ã¯ããªãã€ã³ããŒããŸãã¯ç· ãåãã®ãªã¹ãããããŒãã£ã³ã°ãŠã£ã³ããŠã«è¡šç€ºã§ããŸããããã«ããããŠãŒã¶ãŒã¯æŽçæŽé ãããåªå äºé ã«éäžã§ããŸãã
äŸïŒãã©ãžã«ã®ãªã¢ãŒãã¯ãŒã«ãŒã¯ãããŸããŸãªãããžã§ã¯ãã§äœæ¥ããªãããPiPã§æ¥ã ã®ã¿ã¹ã¯ã®é²è¡ç¶æ³ãææ¡ã§ããŸãã
5. eã©ãŒãã³ã°ãšãªã³ã©ã€ã³ã³ãŒã¹
ãªã³ã©ã€ã³åŠç¿ãã©ãããã©ãŒã ã¯ãDocument Picture-in-Pictureã䜿çšããŠãã³ãŒã¹è³æãã¡ã¢ããŸãã¯é²æç¶æ³ãã©ãã«ãŒããããŒãã£ã³ã°ãŠã£ã³ããŠã«è¡šç€ºã§ããŸããããã«ãããåŠçã¯ãä»ã®Webãµã€ããã¢ããªã±ãŒã·ã§ã³ãé²èЧããªããåŠç¿ãç¶ããããšãã§ããŸãã
äŸïŒã€ã³ãã®åŠçã¯ãå¥ã®ããã¥ã¡ã³ãã§ã¡ã¢ãåããªãããPiPã§è¬çŸ©ãèŠèŽã§ããŸãã
Document Picture-in-Pictureã®å®è£
JavaScriptã䜿çšããŠDocument Picture-in-Pictureãå®è£ ããæ¹æ³ã®åºæ¬çãªæŠèŠã次ã«ç€ºããŸãã
- ãã©ãŠã¶ã®ãµããŒãã確èªããïŒãã©ãŠã¶ãDocument Picture-in-Picture APIããµããŒãããŠããããšã確èªããŸãã
- ãã¿ã³ãŸãã¯ããªã¬ãŒãäœæããïŒPiPæ©èœãããªã¬ãŒãããã¿ã³ãŸãã¯ãã®ä»ã®èŠçŽ ãWebããŒãžã«è¿œå ããŸãã
- PiPãŠã£ã³ããŠãéãïŒ
documentPictureInPicture.requestWindow()ã¡ãœããã䜿çšããŠãæ°ããPiPãŠã£ã³ããŠãéããŸãã - PiPãŠã£ã³ããŠã«ããŒã¿ãå ¥åããïŒJavaScriptã䜿çšããŠãHTMLã³ã³ãã³ããåçã«äœæããPiPãŠã£ã³ããŠã«è¿œå ããŸãã
- ã€ãã³ããåŠçããïŒ
resizeãcloseãªã©ã®ã€ãã³ãããªãã¹ã³ããŠãPiPãŠã£ã³ããŠã管çããŸãã
ã³ãŒãäŸ
ãã®äŸã¯ãDocument Picture-in-Pictureã®ç°¡åãªå®è£ ã瀺ããŠããŸãã
// ãã©ãŠã¶ã®ãµããŒãã確èª
if ("documentPictureInPicture" in window) {
const pipButton = document.getElementById('pipButton');
const video = document.getElementById('myVideo');
pipButton.addEventListener('click', async () => {
try {
// PiPãŠã£ã³ããŠãéã
const pipWindow = await documentPictureInPicture.requestWindow();
// PiPãŠã£ã³ããŠã«ã³ã³ãã³ããå
¥åãã
pipWindow.document.body.innerHTML = `
<video src="${video.src}" controls autoplay muted></video>
<p>Picture-in-Pictureã§åçäžïŒ</p>
`;
// ãŠã£ã³ããŠãéãããããšãã®ã€ãã³ããªã¹ããŒã远å
pipWindow.addEventListener('unload', () => {
console.log('PiPãŠã£ã³ããŠãéããããŸãã');
});
} catch (error) {
console.error('Picture-in-PictureãŠã£ã³ããŠã®ãªãŒãã³äžã«ãšã©ãŒãçºçããŸãã:', error);
}
});
} else {
console.log('ãã®ãã©ãŠã¶ã§ã¯Document Picture-in-Pictureã¯ãµããŒããããŠããŸããã');
}
説æïŒ
- ãã®ã³ãŒãã¯ããŸããã©ãŠã¶ã
documentPictureInPictureAPIããµããŒãããŠãããã©ããã確èªããŸãã - 次ã«ãPiPãããªã¬ãŒãããã¿ã³ãšãããªèŠçŽ ãžã®åç §ãååŸããŸãã
- ãã¿ã³ã«ã€ãã³ããªã¹ããŒã远å ãããŸããã¯ãªãã¯ãããšãæ°ããPiPãŠã£ã³ããŠãéãããã«
documentPictureInPicture.requestWindow()ãåŒã³åºãããŸãã - PiPãŠã£ã³ããŠã®
document.bodyã®innerHTMLããããã£ã¯ã次ã«ãããªèŠçŽ ãšããã¹ãã®æ®µèœãå«ãããã«èšå®ãããŸãããã³ãã¬ãŒããªãã©ã«ã䜿çšããŠãããªã®src屿§ããšã¹ã±ãŒãããããšã«æ³šæããŠãã ããã - PiPãŠã£ã³ããŠãéãããããšãã«ã¡ãã»ãŒãžããã°ã«èšé²ããã€ãã³ããªã¹ããŒã远å ãããŸãã
- PiPã®ãªãŒãã³ããã»ã¹äžã«çºçããå¯èœæ§ã®ããäŸå€ããã£ããããããã®ãšã©ãŒåŠçãå«ãŸããŠããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒPiPãŠã£ã³ããŠããæç¢ºã§çŽæçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã§èšèšããŸããã³ã³ãã³ããèªã¿ããããã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸãã
- ããã©ãŒãã³ã¹ïŒPiPãŠã£ã³ããŠå ã®ã³ã³ãã³ããæé©åããŠããªãœãŒã¹ã®äœ¿çšéãæå°éã«æããã¹ã ãŒãºãªããã©ãŒãã³ã¹ã確ä¿ããŸããäžèŠãªã¢ãã¡ãŒã·ã§ã³ãè€éãªã¬ã³ããªã³ã°ãé¿ããŠãã ããã
- ã¢ã¯ã»ã·ããªãã£ïŒPiPãŠã£ã³ããŠããé害ã®ãããŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããããã«ããŸããç»åã®ä»£æ¿ããã¹ãããããªã®ãã£ãã·ã§ã³ãããŒããŒãããã²ãŒã·ã§ã³ãæäŸããŸãã
- ã»ãã¥ãªãã£ïŒPiPãŠã£ã³ããŠã«è¡šç€ºããããŠãŒã¶ãŒçæã³ã³ãã³ãããµãã¿ã€ãºããŠãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒæ»æãé²ããŸãã
- ã¯ãã¹ãã©ãŠã¶ã®äºææ§ïŒå®è£ ãããŸããŸãªãã©ãŠã¶ã§ãã¹ãããŠãäºææ§ã確ä¿ããŸããå€ããã©ãŠã¶ã®ãµããŒããæäŸããããã«ãpolyfillãŸãã¯shimã®äœ¿çšãæ€èšããŠãã ããã
- æš©éïŒãŠãŒã¶ãŒã®ãã©ã€ãã·ãŒã«æ³šæããŠãã ãããå¿ èŠãªãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã®ã¿ãèŠæ±ããå¿ èŠãªçç±ãæç¢ºã«èª¬æããŸãã
- ãŠã£ã³ããŠã®ãµã€ãºãšé 眮ïŒãŠãŒã¶ãŒãPiPãŠã£ã³ããŠã®ãµã€ãºãšäœçœ®ãã«ã¹ã¿ãã€ãºã§ããããã«ããŸãããŠã£ã³ããŠãç»é¢ã®ããŸããŸãªé åã«ãããã³ã°ããããã®ãªãã·ã§ã³ã®æäŸãæ€èšããŠãã ããã
ãã©ãŠã¶ã®ãµããŒã
Document Picture-in-Pictureã¯çŸåšãGoogle ChromeãMicrosoft Edgeãªã©ã®ChromiumããŒã¹ã®ãã©ãŠã¶ã§ãµããŒããããŠããŸããä»ã®ãã©ãŠã¶ã§ã®ãµããŒãã¯ç°ãªãå ŽåããããŸãã
ãã©ãŠã¶ã®äºææ§ã«é¢ããææ°ã®æ å ±ã«ã€ããŠã¯ãCan I use Webãµã€ããåžžã«ç¢ºèªããŠãã ããã
ä»åŸã®éçº
Document Picture-in-Picture APIã¯ãŸã é²åããŠãããä»åŸã®éçºã«ã¯ä»¥äžãå«ãŸããå¯èœæ§ããããŸãã
- ã€ãã³ãåŠçã®æ¹åïŒPiPãŠã£ã³ããŠããã现ããå¶åŸ¡ã§ãããããå ç¢ãªã€ãã³ãåŠçæ©èœã
- ã¹ã¿ã€ãªã³ã°ãªãã·ã§ã³ã®åŒ·åïŒCSSã䜿çšããPiPãŠã£ã³ããŠã®ã¹ã¿ã€ãªã³ã°ã®æè»æ§ã®åäžã
- ä»ã®APIãšã®çµ±åïŒWeb Share APIãNotifications APIãªã©ã®ä»ã®Web APIãšã®ã·ãŒã ã¬ã¹ãªçµ±åã
çµè«
Document Picture-in-Picture APIã¯Webéçºã®å€é©è ã§ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããé åçãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªæ¹æ³ãæäŸããŸãããã®æ©èœã掻çšããããšã«ãããéçºè ã¯ãã«ã¹ã¿ã ã³ã³ãã³ãã衚瀺ããã€ã³ã¿ã©ã¯ãã£ãã³ã³ãããŒã«ãæäŸãããã«ãã¿ã¹ã¯æ©èœãåäžããããããŒãã£ã³ã°ãŠã£ã³ããŠãäœæã§ããŸããAPIãé²åãç¶ããããå¹ åºããã©ãŠã¶ãµããŒããç²åŸããã«ã€ããŠãææ°ã§é©æ°çãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®äžå¯æ¬ ãªããŒã«ãšãªãããšãæåŸ ãããŸãã
ãã®ã¬ã€ãã§æŠèª¬ãããŠããæ©èœãå®è£ ã®è©³çްãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã«ãããéçºè ã¯Document Picture-in-Pictureã®å¯èœæ§ãæå€§éã«åŒãåºããäžçäžã®èŠèŽè åãã«æ¬åœã«çŽ æŽããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçã¿åºãããšãã§ããŸãã